package com.cskaoyan.javase._2inner._2static._1basic;

/**
 * 静态内部类的访问特点:
 * 主要从以下几个角度研究：
 *
 *      1.静态内部类内部访问外围类成员
 *          直接创建外围类对象即可,访问不受权限限制.
 *
 *      2.外围类访问静态内部类成员
 *          直接创建静态内部类对象即可,访问不受权限限制.
 *
 *      3.外部类访问静态内部类成员(了解即可)
 *          全程受权限限制
 *          而且注意:
 *              这里访问静态内部类成员,不再需要创建外围类对象了
 *              直接new创建静态内部类对象即可
 *          语法:
 *              EnclosedClazz.NestedClazz nc = new EnclosedClazz.NestedClazz();
 *
 * 静态内部类访问外部类成员
 *
 *
 * @since 17:05
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // 可以近似把静态内部类看成外围类的静态成员
        EnclosedClazz.NestedClazz nc = new EnclosedClazz.NestedClazz();
        System.out.println(nc.a);
        // System.out.println(nc.b);
    }
}

class EnclosedClazz {
    int a;
    private int b = 10;
    static int c = 20;

    public void test(){
        NestedClazz nc = new NestedClazz();
        System.out.println(nc.b);
    }

    static class NestedClazz {
        int a;
        private int b = 10;
        static int c = 20;
        public void testNested(){
            EnclosedClazz ec = new EnclosedClazz();
            System.out.println(ec.a);
            System.out.println(ec.b);
            System.out.println(a);
        }
        public static void testStaticNested(){
            EnclosedClazz ec = new EnclosedClazz();
            System.out.println(ec.a);
            System.out.println(ec.b);
            System.out.println(new NestedClazz().a);
            // System.out.println(a);
        }
    }
}